可設定的rules 有四種 type:
有這幾種現有的變數可以使用
讀取:
{
  "rules": {
     "users": {
        // 只能讀取18歲以上
        ".read": "data.child('age').val() >= 18",
        "name": {
          // 不加也可以, 因為default就是false
          ".read": false
        }
     }
  }
}
寫入:
{
  "rules": {
    ".write": true,
    "users": {
      // 要新增的資料必須包含這兩個欄位
      ".validate": "newData.hasChildren(['name', 'age'])",
      "name": {
        // 名稱必須包含在"/team_frontend/"的子節點
        ".validate": "root.child('team_frontend/' + newData.val()).exists()"
      },
      "age": {
        // 必須是數字且值在1到99之間
        ".validate": "newData.isNumber() &&
                      newData.val() >= 1 &&
                      newData.val() <= 99"
      }
    }
  }
}
排序:
過濾:
這邊可以印出我們users所有的資料
DB_USERS.orderByKey().once('value').then(snapshot => {
  snapshot.forEach(childSnapshot => {
    console.log(childSnapshot.val());
  });
})
如果資料是用push()存入, 就可以用orderByKey()取出, orderByChild() 可傳入子節點的參數, 然後用過濾的方式將資料取出, 舉例:
firebase.database().ref('team_frontend/' + name).orderByChild("age").startAt(20).once('value').then(function(snapshot){
  snapshot.forEach(function(childSnapshot) {
    console.log(childSnapshot.val());
    //在team_frontend裡按照年齡排序, 並且年齡大於20以上的人
  });
})
參考資料 YJ BLOG